package config

import (
	"encoding/json"
	"fmt"
	"os"

	"nettools/shared/models"
)

// LoadConfig 加载客户端配置文件
func LoadConfig(configPath string) (*models.ClientConfig, error) {
	// 读取文件内容
	data, err := os.ReadFile(configPath)
	if err != nil {
		return nil, fmt.Errorf("读取配置文件失败: %w", err)
	}

	// 解析JSON配置
	var config models.ClientConfig
	if err := json.Unmarshal(data, &config); err != nil {
		return nil, fmt.Errorf("解析配置文件失败: %w", err)
	}

	// 设置默认值
	if config.ClientID == "" {
		config.ClientID = "default-client"
	}
	if config.ServerAddr == "" {
		config.ServerAddr = "127.0.0.1"
	}
	if config.ServerPort == 0 {
		config.ServerPort = 9090
	}
	if config.LocalHost == "" {
		config.LocalHost = "127.0.0.1"
	}

	// 如果使用新的统一服务配置，则直接返回
	if len(config.Services) > 0 {
		return &config, nil
	}

	// 兼容老配置格式，转换为新格式
	if config.Mode == "internal" && len(config.Internal.Services) > 0 {
		config.Services = make([]models.Service, 0, len(config.Internal.Services))
		for _, svc := range config.Internal.Services {
			if svc.Enabled {
				config.Services = append(config.Services, models.Service{
					Name:       svc.Name,
					ServerPort: svc.ServerPort,
					TargetHost: svc.TargetHost,
					TargetPort: svc.TargetPort,
					Protocol:   svc.Protocol,
					Enabled:    svc.Enabled,
				})
			}
		}
	} else if config.Mode == "external" && len(config.External.Services) > 0 {
		config.Services = make([]models.Service, 0, len(config.External.Services))
		for _, svc := range config.External.Services {
			if svc.Enabled {
				config.Services = append(config.Services, models.Service{
					Name:       svc.Name,
					ServerPort: svc.ServerPort,
					LocalPort:  svc.LocalPort,
					Protocol:   svc.Protocol,
					Enabled:    svc.Enabled,
				})
			}
		}
	}

	return &config, nil
}
